package oop3.src.innerclass_static;

/**
 * 外部类
 */
public class Outer {
    /**
     * 学习内部类的使用
     * 主要是静态内部类和成员内部类
     * 局部内部类过于鸡肋,不与展示
     */
    public static int a = 19;
    private String hobby = "羽毛球";
    //外部类的实例成员并不能被静态内部类调用(外部类未必有对象,而静态内部类一定存在)
    //因为静态内部类本身也是个静态成员,属于类不属于对象
    public static class Inner{
        private String name;
        private int age;
        public static String schoolName;

        public Inner() {
        }

        public Inner(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public void show(){
            System.out.println("名称:" + name);
            System.out.println("可以访问外部类的静态数据" + a);
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public static String getSchoolName() {
            return schoolName;
        }

        public static void setSchoolName(String schoolName) {
            Inner.schoolName = schoolName;
        }
    }

    /**
     * 成员内部类,相当于是外部类的成员
     * 在JDK16才开始支持在成员内部类的静态成员
     */
    public class Inner2{
        /**
         * 在成员内部类中访问所在外部类对象使用外部类.this的写法
         * */
        private String name2;
        private int age2;
        //JDK16之后支持的写法
        public static int a;

        public static void test(){
            System.out.println("这是成员内部类的静态方法");
        }
        public void show(){
            System.out.println("这是个" + name2);
            System.out.println("成员内部类在外部类对象中,所以访问外部对象的实例成员,eg:" + hobby);
        }

        public String getName2() {
            return name2;
        }

        public void setName2(String name2) {
            this.name2 = name2;
        }

        public int getAge2() {
            return age2;
        }

        public void setAge2(int age2) {
            this.age2 = age2;
        }

    }
}
